package com.mall.mapper;

import com.mall.entity.Category;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商品分类数据访问层
 * 
 * @author Mall Team
 */
@Mapper
public interface CategoryMapper {
    
    /**
     * 插入分类
     */
    int insert(Category category);
    
    /**
     * 根据ID删除分类
     */
    int deleteById(Long id);
    
    /**
     * 更新分类
     */
    int updateById(Category category);
    
    /**
     * 根据ID查询分类
     */
    Category selectById(Long id);
    
    /**
     * 查询所有分类
     */
    List<Category> selectAll();
    
    /**
     * 根据父ID查询子分类
     */
    List<Category> selectByParentId(Long parentId);
    
    /**
     * 根据级别查询分类
     */
    List<Category> selectByLevel(Integer level);
    
    /**
     * 查询启用状态的分类
     */
    List<Category> selectEnabledCategories();
    
    /**
     * 分页查询分类列表
     */
    List<Category> selectPage(@Param("offset") Integer offset, 
                             @Param("limit") Integer limit,
                             @Param("keyword") String keyword,
                             @Param("parentId") Long parentId,
                             @Param("level") Integer level,
                             @Param("status") Integer status);
    
    /**
     * 查询分类总数
     */
    Long selectCount(@Param("keyword") String keyword,
                    @Param("parentId") Long parentId,
                    @Param("level") Integer level,
                    @Param("status") Integer status);
    
    /**
     * 更新分类状态
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);
    
    /**
     * 检查分类名称是否存在
     */
    boolean existsByName(@Param("name") String name, @Param("parentId") Long parentId);
    
    /**
     * 检查是否有子分类
     */
    boolean hasChildren(Long parentId);
    
    /**
     * 批量删除分类
     */
    int deleteBatchByIds(@Param("ids") List<Long> ids);
    
    /**
     * 获取分类树（递归查询）
     */
    List<Category> selectCategoryTree();
}